#!/usr/bin/env python3
"""
perl-Module-Build MCP Server

面向软件：perl-Module-Build
这是一个用于 Perl 模块构建系统的 MCP 服务器，主要封装 config_data 命令行工具的功能。

MCP tools 列表：
1. config_data_config - 获取指定模块的配置信息
   参数：module_name (str) - 模块名称
   返回：统一的 JSON 结构

2. config_data_eval - 设置配置值并执行 Perl 表达式
   参数：module_name (str) - 模块名称, config_name (str) - 配置项名称, config_value (str) - 配置值
   返回：统一的 JSON 结构

3. config_data_feature - 获取指定模块的特性信息
   参数：module_name (str) - 模块名称
   返回：统一的 JSON 结构

4. config_data_help - 获取 config_data 命令的帮助信息
   参数：无
   返回：统一的 JSON 结构

5. config_data_set_config - 设置模块的配置值
   参数：module_name (str) - 模块名称, config_name (str) - 配置项名称, config_value (str) - 配置值
   返回：统一的 JSON 结构

6. config_data_set_feature - 设置模块的特性值
   参数：module_name (str) - 模块名称, feature_name (str) - 特性名称, feature_value (str) - 特性值
   返回：统一的 JSON 结构
"""

from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json

mcp = FastMCP("perl-Module-Build MCP Server")

@mcp.tool()
def config_data_config(module_name: str) -> dict:
    """
    获取指定模块的配置信息
    
    参数:
        module_name: 模块名称，如 "Module::Build"
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--module", module_name, "--config"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def config_data_eval(module_name: str, config_name: str, config_value: str) -> dict:
    """
    设置配置值并执行 Perl 表达式
    
    参数:
        module_name: 模块名称，如 "Module::Build"
        config_name: 配置项名称
        config_value: 配置值（可以包含 Perl 表达式）
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--module", module_name, "--set_config", f"{config_name}={config_value}", "--eval"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def config_data_feature(module_name: str) -> dict:
    """
    获取指定模块的特性信息
    
    参数:
        module_name: 模块名称，如 "Module::Build"
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--module", module_name, "--feature"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def config_data_help() -> dict:
    """
    获取 config_data 命令的帮助信息
    
    参数:
        无
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--help"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def config_data_set_config(module_name: str, config_name: str, config_value: str) -> dict:
    """
    设置模块的配置值
    
    参数:
        module_name: 模块名称，如 "Module::Build"
        config_name: 配置项名称
        config_value: 配置值
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--module", module_name, "--set_config", f"{config_name}={config_value}"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def config_data_set_feature(module_name: str, feature_name: str, feature_value: str) -> dict:
    """
    设置模块的特性值
    
    参数:
        module_name: 模块名称，如 "Module::Build"
        feature_name: 特性名称
        feature_value: 特性值
    
    返回:
        JSON 结构: {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    command = ["config_data", "--module", module_name, "--set_feature", f"{feature_name}={feature_value}"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

if __name__ == "__main__":
    mcp.run()